import { RJSFSchema, UiSchema } from '@rjsf/utils';
import { CollapseTemplate } from 'nextcae-base';
import { numberJsonData } from './numberJsonData';
import { sizeJsonData } from './sizeJsonData';
import { alignJsonData } from './alignJsonData';
import { SelectionPickField } from '@/components/FieldTemplate/SelectionPickField';
import { i18n } from '@/common/utils';

export const schema: RJSFSchema = {
  type: 'object',
  properties: {
    Tabs: {
      type: 'string',
      items: { type: 'string' },
      default: 'Number',
    },
  },
  allOf: [numberJsonData, sizeJsonData, alignJsonData],
};

export const uiSchema: UiSchema = {
  Tabs: {
    'ui:field': 'tabsField',
    'ui:options': {
      options: [
        {
          const: 'Number',
          title: i18n.t('Number'),
          icon: 'commands/mesh/seed-number',
        },
        {
          const: 'Size',
          title: i18n.t('Size'),
          icon: 'commands/mesh/seed-size',
        },
        {
          const: 'Align',
          title: i18n.t('Align'),
          icon: 'commands/mesh/align',
        },
      ],
    },
  },
  Selection: {
    'ui:FieldTemplate': CollapseTemplate,
    'ui:layout': [1, 2],
    'ui:options': {
      label: false, // 不显示 label
    },
    source: {
      'ui:field': SelectionPickField,
      'ui:focused': true, // 聚焦字段，会自动聚焦到该字段
    },
    target: {
      'ui:field': SelectionPickField,
    },
  },
  DistributionOptions: {
    'ui:order': ['biasing', 'factor', 'number', 'size', 'startSize', 'endSize'],
    'ui:FieldTemplate': CollapseTemplate,
    'ui:layout': [1, 2],
    'ui:options': {
      label: false, // 不显示 label
    },
    biasing: {
      'ui:field': 'selectionField',
    },
    number: {
      'ui:field': 'inputField',
      'ui:type': 'number',
    },
    factor: {
      'ui:field': 'inputField',
      'ui:type': 'number',
    },
    size: {
      'ui:field': 'inputField',
      'ui:type': 'number',
    },
    startSize: {
      'ui:field': 'inputField',
      'ui:type': 'number',
    },
    endSize: {
      'ui:field': 'inputField',
      'ui:type': 'number',
    },
  },
  reverseDirection: {
    'ui:field': 'checkboxField',
  },
};
